/* Laboratorio # 2 - Administración de bases de datos
 Jorge Fallas Ramos         402090469
 José Roberto Sánchez       115400070
 Daniel Villalobos Venegas  402110100
 */
package monitorinitdb;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import monitorinitdb.Vista.VentScripts;

public class ConectorUnix extends ConectorOracle {

    private final String llamado = "sqlplus ", rol = " as sysdba";

    /**
     *
     * @param user
     * @param pass Conector directo a Oracle a través de SQL*Plus, se requiere
     * el nombre de usuario y la contraseña de un usuario que tenga permisos de
     * sistema, por defecto se le agrega el rol de SYSDBA si cumple con esa
     * condición
     * @throws IOException En caso de error, cae en esta excepción
     */
    public ConectorUnix(String user, String pass) throws IOException {
        super(user, pass);
        run.exec(llamado + user + "/" + pass + rol);
    }

    private File scriptSH(String script) throws FileNotFoundException {
        File n = new File("Ejecutar.sh");
        String str = " | " + llamado + user + "/" + pass + rol + "\n";
        PrintWriter escritor = new PrintWriter(n);
        escritor.write("#/bin/sh\n");
        escritor.write("echo \"@" + script + "\"" + str);
        String[] scripts = VentScripts.getScripts();
        if (scripts != null) {
            for (int i = 1; i < scripts.length; i++) {
                escritor.write("echo \"@" + scripts[i] + "\"" + str);
            }
        }
        escritor.close();
        return n;
    }

    /**
     *
     * @param script
     */
    @Override
    public void ejecutaInstruccion(String script) {
        File n = null;
        try {
            n = scriptSH(script);
            run.exec("chmod +x " + n.getAbsolutePath());
            Process p = run.exec("sh -c \"" + n.getAbsolutePath() + "\"");
            muestraConsola(p.getInputStream());
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }
    }
}
